/**
  ************************************* Copyright ******************************   
  *                 (C) Copyright 2019,CWL,China, GCU.
  *                            All Rights Reserved
  *                              
  *                     By(武汉市先讯科技有限公司)
  *                     https://www.sensertek.com
  *      
  * FileName   : hal_uart.h   
  * Version    : v1.0		
  * Author     : CWL			
  * Date       : 2019-05-07         
  * Description:    
  * Function List:  
  	1. ....
  	   <version>: 		
  <modify staff>:
  		  <data>:
   <description>:  
  	2. ...
  ******************************************************************************
 */



#ifndef __HAL_UART_H_
#define __HAL_UART_H_

#include "hal_mcu.h"
#include "hal_types.h"
#include <stddef.h>

/////////////////////////////////     串口及配置函数        //////////////////////////////////////////////////
/*************************************************************************************************************
//                     7     6     5    4    3    2   1   0       Reset Value
//sfr SCON  = 0x98;   SM0   SM1   SM2  REN  TB8  RB8  TI  RI      00000000B		 //S1 Control
*************************************************************************************************************/
#define		S1_M0x6()			    SET_BIT_MASK(AUXR, 0x20)    /* UART Mode0 Speed is 6x Standard       */
#define		S1_M0x1()			    CLEAR_BIT_MASK(AUXR, 0x20)  /* default, UART Mode0 Speed is Standard */ 
#define		S1_DoubleRate()		    SET_BIT_MASK(PCON, 0x80) /*模式1、2、3波特率加倍*/
#define		S1_SHIFT()		        CLEAR_BIT_MASK(SCON, 0xC0)
#define		S1_8bit()		        MODIFY_REG(SCON, 0xA0, 0x40)
#define		S1_9bit()		        MODIFY_REG(SCON, 0x20, 0xC0)
#define		S1_RX_Enable()		    SET_BIT_MASK(SCON, 0x10)
#define		S1_RX_Disable()		    CLEAR_BIT_MASK(SCON, 0x10)
#define		TI1             	    TI			/* 判断TI1是否发送完成*/
#define		RI1			            RI			/* 判断RI1是否接收完成*/
#define		SET_TI1()		        TI = 1		/* 设置TI1(引起中断)  */
#define		CLR_TI1()		        TI = 0		/* 清除TI1*/
#define		CLR_RI1()		        RI = 0		/* 清除RI1*/
#define		S1TB8_SET()		        TB8 = 1		/* 设置TB8*/
#define		S1TB8_CLR()		        TB8 = 0		/* 清除TB8*/
#define		S1_Int_Enable()		    ES =  1		/* 串口1允许中断*/
#define		S1_Int_Disable()	    ES =  0		/* 串口1禁止中断*/
#define 	S1_BRT_UseTimer1()	    CLEAR_BIT_MASK(AUXR, 1)
#define 	S1_BRT_UseTimer2()	    SET_BIT_MASK(AUXR, 1)
#define		S1_USE_P30P31()		    CLEAR_BIT_MASK(P_SW1, 0xc0)	     /*UART1 使用P30 P31口	默认*/
#define		S1_USE_P36P37()		    MODIFY_REG(P_SW1, 0xc0, 0x40)/*UART1 使用P36 P37口*/
#define		S1_USE_P16P17()		    MODIFY_REG(P_SW1, 0xc0, 0x80)/*UART1 使用P16 P17口*/
#define     S1_USE_P43P44()         MODIFY_REG(P_SW1, 0xc0, 0xc0)/*UART1 使用P43 P44口*/
#define     S1_INT_PRIORITY(Priority)   st(PS = GetBit(Priority,0); GetBit(Priority,1) == 0x01 ? SET_BIT_MASK(IPH, PSH) : CLEAR_BIT_MASK(IPH, PSH);)

/*************************************************************************************************************
;			  7      6      5      4      3      2     1     0        Reset Value
;sfr S2CON = 0x9A;	S2SM0    -    S2SM2  S2REN  S2TB8  S2RB8  S2TI  S2RI      00000000B	 //S2 Control
;sfr IE2       = 0xAF;	   -     -      -      -      -      -    ESPI  ES2       00000000B	//Auxiliary Interrupt
*************************************************************************************************************/
#define		S2_MODE0()		    CLEAR_BIT_MASK(S2CON, 0xA0)	/* 串口2模式0，8位UART，波特率 = 定时器2的溢出率 / 4 */
#define		S2_MODE1()		    SET_BIT_MASK(S2CON, 0x80)	/* 串口2模式1，9位UART，波特率 = 定时器2的溢出率 / 4 */
#define		S2_8bit()		    CLEAR_BIT_MASK(S2CON, 0x80)	/* 串口2模式0，8位UART，波特率 = 定时器2的溢出率 / 4 */
#define		S2_9bit()		    SET_BIT_MASK(S2CON, 0X80)	/* 串口2模式1，9位UART，波特率 = 定时器2的溢出率 / 4 */
#define		S2_RX_Enable()		SET_BIT_MASK(S2CON, 0x10)	/* 允许串2接收*/
#define		S2_RX_Disable()		CLEAR_BIT_MASK(S2CON, 0x10)	/* 禁止串2接收*/
#define		TI2			        READ_BIT(S2CON, 1)   /*((S2CON & 2) != 0) 判断TI2是否发送完成*/
#define		RI2			        READ_BIT(S2CON, 0)	/*((S2CON & 1) != 0) 判断RI2是否接收完成*/
#define		SET_TI2()		    SET_BIT_MASK(S2CON, 0x02)	/* 设置TI2(引起中断)*/
#define		CLR_TI2()		    CLEAR_BIT_MASK(S2CON, 0x02)	/* 清除TI2*/
#define		CLR_RI2()		    CLEAR_BIT_MASK(S2CON, 0x01)		    /* 清除RI2*/
#define		S2TB8_SET()		    SET_BIT_MASK(S2CON,0x08)	/* 设置TB8*/
#define		S2TB8_CLR()		    CLEAR_BIT_MASK(S2CON,0x08)	/* 清除TB8*/
#define		S2_Int_Enable()		SET_BIT_MASK(IE2, 0x01)		/* 串口2允许中断*/
#define		S2_Int_Disable()	CLEAR_BIT_MASK(IE2, 0x01)		/* 串口2禁止中断*/
#define		S2_USE_P10P11()		CLEAR_BIT_MASK(P_SW2, 0x01)		/* UART2 使用P1口	默认*/
#define		S2_USE_P46P47()		SET_BIT_MASK(P_SW2,0x01)		/* UART2 使用P4口*/
#define     S2_INT_PRIORITY(Priority)   st(GetBit(Priority,0) == 0x01 ? SET_BIT_MASK(IP2, PS2) : CLEAR_BIT_MASK(IP2,PS2); GetBit(Priority,1) == 0x01 ? SET_BIT_MASK(IP2H, PS2H) : CLEAR_BIT_MASK(IP2H, PS2H);)


void HalUARTInit(void);

//void Uart1Init(uint32 baudrate);
/**
  * @Name    UART1_SendData
  * @brief   UART1发送1Byte数据
  * @param   dat: [输入] 被发送的1Byte数据
  * @retval  None
  * @author  CWL
  * @Data    2019-06-12
 **/
void UART1_SendData(uint8 dat);

//void Uart2Init(uint32 baudrate);
/**
  * @Name    UART2_SendData
  * @brief   UART2发送1Byte数据
  * @param   dat: [输入] 被发送的1Byte数据
  * @retval  None
  * @author  CWL
  * @Data    2019-06-12
 **/
void UART2_SendData(uint8 dat);

#endif


 

